home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / sdk / docs / exploitTutorial.txt < prev    next >
Text File  |  2006-06-30  |  8KB  |  189 lines

  1. This is not an exploit tutorial.  This is just a simple walkthrough on
  2. writing exploits as modules for the metasploit framework.
  3.  
  4. This document is tutorial style because we feel that example is the best way to
  5. learn how to write for Metasploit.  These examples are really just a small
  6. look and what goes on and what is possible.  The best way to learn more
  7. advanced capabilities is to read our module code, framework code, and email us
  8. with questions (in that order ;)).  For example, if you are writing a brute
  9. force linux exploit, go through our exploits and find something similar.  Not
  10. only will you be able to see how we did it, but you can also match our standard
  11. option names, techniques, etc.
  12.  
  13. Let's start with a simple example of a network based buffer overflow.  This is
  14. a simple daemon that will just listen for one connection, read it in, and exit.
  15.  
  16. [ source code in vuln1.c ]
  17.  
  18. You can see we have a buffer overflow when sending more than 64 characters
  19. of data.  The strategy (since its a single shot), is to send a large nopsled,
  20. and to return directly into the stack.  We'll start a new Metasploit exploit
  21. module, fill in the info information, and use some dev routines to find the
  22. offset to EIP.
  23.  
  24. [ source code in vuln1_1.pm ]
  25.  
  26. There are many comments inline in the exploit module.  For our inital probing,
  27. we write a simple exploit without target or payload support.  We just want
  28. to gather some inital information about the bug, and use this to write our
  29. exploit.  We populate some metadata about the exploit, like the name, authors,
  30. supported architectures/operating systems, etc.  We create out Exploit method,
  31. the code that will be called by the framework when the user chooses to execute
  32. your exploit modules.
  33.  
  34. msf > use vuln1_1 
  35. msf vuln1_1 > show options 
  36.  
  37. Exploit Options
  38. ===============
  39.  
  40.   Exploit:    Name      Default    Description
  41.   --------    ------    -------    ------------------    
  42.   required    RHOST                The target address
  43.   required    RPORT     11221      The target port
  44.   
  45.   Target: Targetless Exploit
  46.  
  47. msf vuln1_1 > set RHOST 127.0.0.1
  48. RHOST -> 127.0.0.1
  49. msf vuln1_1 > exploit
  50.  
  51. .... In another window ....
  52. Program received signal SIGSEGV, Segmentation fault.
  53. 0x63413563 in ?? ()
  54. (gdb) 
  55.  
  56. # perl sdk/patternOffset.pl 0x63413563
  57. 76
  58.  
  59. We use the patternOffset.pl program to find the likely offset of EIP (76). We
  60. also used gdb to pull the value of esp (0xbffffa30) on our system.
  61.  
  62. [ source code in vuln1_2.pm ]
  63.  
  64. We know got enough information about the bug to actually start writing an
  65. Exploit.  We add a Target (just one for my system), and also require the
  66. Framework to supply use with a payload.
  67.  
  68. We can us this information and actually write a functional exploit (for our
  69. system).  We add a Payload entry, telling that Framework to require the
  70. user to supply a payload, and allowing us to pull out this payload from the
  71. EncodedPayload entry the Framework setups up in the environment.
  72. EncodedPayload is an object, and we simple call to the Payload method.
  73.  
  74. We setup some Advanced options for some of the details of our exploit vector.
  75. This is handy mostly for development, or other researcher thinkering with your
  76. exploits.  These aren't options that a general user will usually change, but
  77. I've found that adding options like these is be very useful.
  78.  
  79. It is important to note that you call GetLocal for Advanced Options!  The
  80. general rule of thumb is to call GetLocal for Advanced Options, and GetVar for
  81. everything else.  One main difference between that two is that GetLocal will
  82. not look in the Global Environment (not entirely true, but enough so).
  83.  
  84. We finish the module, and it works!
  85.  
  86. msf vuln1_2(linx86_reverse) > show options 
  87.  
  88. Exploit and Payload Options
  89. ===========================
  90.  
  91.   Exploit:    Name      Default      Description
  92.   --------    ------    ---------    ------------------    
  93.   required    RHOST     127.0.0.1    The target address
  94.   required    RPORT     11221        The target port
  95.   
  96.   Payload:    Name      Default      Description
  97.   --------    ------    ---------    -----------------------------------    
  98.   required    LHOST     127.0.0.1    Local address to receive connection
  99.   required    LPORT     12322        Local port to receive connection
  100.   
  101.   Target: Slackware Linux
  102.  
  103. msf vuln1_2(linx86_reverse) > set
  104. LHOST: 127.0.0.1
  105. LPORT: 12322
  106. PAYLOAD: linx86_reverse
  107. RHOST: 127.0.0.1
  108. TARGET: 0
  109. msf vuln1_2(linx86_reverse) > exploit
  110. [*] Starting Reverse Handler.
  111. [*] Got connection from 127.0.0.1:32896
  112.  
  113. id
  114. uid=1000(spoonm) gid=1000(spoonm) groups=1000(spoonm)
  115.  
  116.  
  117. [ source code in vuln1_3.pm ]
  118.  
  119. This exploitable program will have the socket open when we gain execution
  120. control.  This allows us to support findsock payloads, allowing reuse of the
  121. inital connection we made to the service.
  122.  
  123. We inform the Framework that we support payloads tagged with the findsock
  124. keyword, adding it to our list of supported payload keys (with the +findsock).
  125. Along with supporting findsock, we also must pull the CPORT option out of the
  126. environment.  CPORT is used by srcport style findsock payloads, enabling the
  127. exploit and payloads to both have knowledge of the srcport the connection will
  128. be made from (used to identify the socket in the shellcode).  The CPORT option
  129. is added into UserOpts by the Payload, and is only neccessarily from the users
  130. end when using a srcport style findsock payload.  From the exploit perspective
  131. you must be aware that this option may be set, and pass it along to the socket
  132. creation method, creating the socket with the specified srcport (if supplied).
  133. If a user isn't using a srcport style findsock payload, CPORT will be undefined
  134. and the socket will get created with a random source port.  Keeping srcport in
  135. mind is very important, sometimes it is required to sleep a little between
  136. brute force attemps to allow the old socket to get cleaned up so you can reuse
  137. the src port.  It is also important to realize that you can not have multiple
  138. concurrent connections with the same srcport, so CPORT should only be passed
  139. on the connection likely to have the shell (if say, you had an exploit that
  140. required more than one connection to be made).
  141.  
  142. We add some general nice features to the exploit, printing information about
  143. what target it is trying, informing the user that things are working.
  144.  
  145. Below is a demonstration of working findsock (recv tag style, not CPORT).
  146.  
  147. msf vuln1_3(linx86_findrecv) > show options 
  148.  
  149. Exploit and Payload Options
  150. ===========================
  151.  
  152.   Exploit:    Name      Default      Description
  153.   --------    ------    ---------    ------------------    
  154.   required    RHOST     127.0.0.1    The target address
  155.   required    RPORT     11221        The target port
  156.   
  157.   Payload:    Name      Default    Description
  158.   --------    ------    -------    -----------    
  159.   
  160.   Target: Slackware Linux
  161.  
  162. msf vuln1_3(linx86_findrecv) > set
  163. PAYLOAD: linx86_findrecv
  164. RHOST: 127.0.0.1
  165. TARGET: 0
  166. msf vuln1_3(linx86_findrecv) > exploit
  167. Trying Slackware Linux - 0xbffffa60
  168. [*] Findsock found shell...
  169.  
  170. id
  171. uid=1000(spoonm) gid=1000(spoonm) groups=1000(spoonm)
  172.  
  173.  
  174. Instead of writing a more complicated demonstration vulnerable program (like
  175. one that does a fork), I documented the svnserve_date module.  This module
  176. exploits the subversion svnserve daemon, and demonstrates a bruteforce exploit
  177. with box linux and freebsd targets, and findsock support.
  178.  
  179. [ source code in svnserve_date.pm ]
  180.  
  181. This document should be enough to get your feet off the ground and familiar
  182. with the development side of the Metasploit Framework.  The requirements for
  183. exploits very greatly and often require specific features and support from the
  184. Framework.  We've written a lot of different modules that take advantage of
  185. different pieces of the framework, and suggest reading these to become a more
  186. advanced module developer.
  187.  
  188. Thank you for not smoking, and enjoy your day.
  189.